table of contents
MKNOD(2) | Manual del Programador de Linux | MKNOD(2) |
NOMBRE¶
mknod - crea un fichero especial o un fichero regular
SINOPSIS¶
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int mknod(const char *pathname, mode_t mode, dev_t dev);
DESCRIPCIÓN¶
mknod intenta crear en el sistema de ficheros un nodo-i (fichero, fichero especial de dispositivo o tubería nombrada (FIFO)) llamado pathname, especificado por mode y dev. mode especifica tanto los permisos de uso como el tipo de nodo-i a crear. Debe ser una combinación (mediante un O-lógico) de uno de los tipos de ficheros enumerados a continuación y de los permisos para el nuevo nodo-i. Los permisos son modificados por la máscara umask en la forma usual: los permisos del nodo-i creado son (mode & ~umask).
El tipo de fichero debe ser uno de los siguientes: S_IFREG, S_IFCHR, S_IFBLK y S_IFIFO para especificar un fichero normal (que será creado vacío), un fichero especial de caracteres, un fichero especial de bloques o FIFO (tubería con nombre), respectivamente, o cero, lo que creará un fichero normal.
Si el tipo de fichero es S_IFCHR o S_IFBLK entonces dev especifica los números mayor y menor del fichero especial de dispositivo creado; en caso contrario, es ignorado.
Si pathname ya existe, o es un enlace simbólico, esta llamada fallará devolviendo el error EEXIST.
El identificador efectivo de usuario del proceso indica el propietario del nuevo nodo-i. Si el directorio que contiene al nodo-i tiene activo el bit de SETGID (fijar identifcador de grupo) o si el sistema de ficheros es montado con la semántica de grupos de BSD, el nuevo nodo heredará la pertenencia al grupo al que pertenezca su directorio padre; en caso contrario, pertenecerá al grupo indicado por el identificador efectivo de grupo del proceso.
VALOR DEVUELTO¶
mknod devuelve cero si ha funcionado correctamente, -1 si ha ocurrido un error (en cuyo caso se asigna a errno un valor apropiado).
ERRORES¶
- EPERM
- mode solicita la creación de algo distinto a una tubería con nombre (FIFO), y el invocador no es el superusuario; este error también se devuelve si el sistema de ficheros que contiene pathname no soporta el tipo de nodo-i solicitado.
- EINVAL
- mode solicita la creación de algo diferente a un fichero normal, un fichero especial de dispositivo o una FIFO.
- EEXIST
- pathname ya existe.
- EFAULT
- pathname apunta fuera de su espacio de direcciones permitido.
- EACCES
- El proceso no tiene permiso de escritura en el directorio padre o no tiene permiso de búsqueda (ejecución) en uno de los directorios incluidos en pathname.
- ENAMETOOLONG
- pathname es demasiado largo.
- ENOENT
- Un directorio componente de pathname no existe o es un enlace simbólico descolgado.
- ENOTDIR
- Un componente utilizado como directorio en pathname no es, de hecho, un directorio.
- ENOMEM
- No hay suficiente memoria disponible en el núcleo.
- EROFS
- pathname indica un fichero en un sistema de ficheros de sólo-lectura.
- ELOOP
- Se han encontrado demasiados enlaces simbólicos al resolver pathname.
- ENOSPC
- El dispositivo que contiene pathname no tiene espacio para el nuevo nodo-i.
CONFORME A¶
SVr4 (pero la llamada requiere privilegios y por esto no es POSIX), 4.4BSD. La versión Linux difiere de la SVr4 en que no requiere permisos de superusuario para crear tuberías, y también en que los errores EMULTIHOP, ENOLINK, o EINTR no están documentados.
OBSERVACIONES¶
POSIX 1003.1-2001 dice: "El único uso portable de mknod() es para crear un fichero especial de tipo FIFO. Si mode es distinto de S_IFIFO o dev es distinto de 0, el comportamiento de mknod() es indefinido."
Bajo Linux, esta llamada no puede usarse para crear ficheros de tipo directorio o de tipo conector, y no puede ser utilizada por otro usuario que no sea el superusuario para crear ficheros normales. Para crear directorios use mkdir, y para crear FIFOs use mkfifo.
Existen numerosas pegas en el protocolo por debajo de NFS. Algunas de estas afectan a mknod.
VÉASE TAMBIÉN¶
close(2), fcntl(2), mkdir(2), mount(2), open(2), read(2), socket(2), stat(2), umask(2), unlink(2), write(2), fopen(3), mkfifo(3)
29 Marzo 1994 | Linux 1.0 |